package pe.edu.upc.dsd.deal.dao.jdbc;

import java.util.List;

import javax.sql.DataSource;

import pe.edu.upc.dsd.deal.dao.DealDao;
import pe.edu.upc.dsd.deal.model.Deal;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;


@Repository
public class DealDaoJdbc extends SimpleJdbcDaoSupport implements DealDao {

	@Autowired
	public DealDaoJdbc(DataSource dataSource) {
		setDataSource(dataSource);
	}

	public Deal find(String isbn) {
		try {
			return getSimpleJdbcTemplate().queryForObject(
					"select isbn, establecimiento, titulo, fecha, monto, precio from deals where isbn=?",
					new BeanPropertyRowMapper<Deal>(Deal.class), isbn);
		} catch (EmptyResultDataAccessException e) {
			return null;
		}
	}

	public List<Deal> findAll() {
		return getSimpleJdbcTemplate().query(
				"select isbn, establecimiento, titulo, fecha, monto, precio from deals",
				new BeanPropertyRowMapper<Deal>(Deal.class));
	}

	@Override
	public void save(Deal deal) {
		getSimpleJdbcTemplate().update(
				"insert into deals(isbn, establecimiento, titulo, fecha, monto, precio) values (?, ?, ?, ?, ?, ?)",
				deal.getIsbn(), deal.getEstablecimiento(), deal.getTitulo(), deal.getFecha(), deal.getMonto(), deal.getPrecio());
	}

	@Override
	public void update(Deal deal) {
		getSimpleJdbcTemplate().update(
				"update deals set establecimiento=?, titulo=?, fecha=?, monto=?, precio=? where isbn=?",
				deal.getEstablecimiento(), deal.getTitulo(), deal.getFecha(), deal.getMonto(), deal.getPrecio(), deal.getIsbn());
	}

	@Override
	public void delete(Deal deal) {
		getSimpleJdbcTemplate().update("delete from deals where isbn=?",
				deal.getIsbn());
	}

}
